// 解析歌词的函数

// 匹配每一句歌词中 [00:04.78] 时间的正则表达式
const timeRegExp = /\[(\d{2}):(\d{2})\.(\d{2,3})\]/;

export default function parseLyric(lyricString) {
  // 将每一个换行符处进行切割，将歌词转换成一个数组，数组的每一项就是每一行歌词
  const lyricStrings = lyricString.split("\n");

  const lyricInfos = []; // 歌词的内容（包括每一句歌词的时间点和每一句的歌词）
  
  // 遍历每一行的歌词
  for(const lineString of lyricStrings) {
    // 每一行的内容：[00:28.50]你额头的伤口 你的 不同 你犯的错
    const timeResult = timeRegExp.exec(lineString); // 通过正则表达式匹配每一行歌词中的时间
    if(!timeResult) continue; // 有些时间可能为空，为空的话就继续

    // 1、获取匹配到的时间
    const minute = timeResult[1] * 60 * 1000; // 分钟，再转成毫秒
    const second = timeResult[2] * 1000; // 秒，再转成毫秒
    const millsecond = timeResult[3].length === 2 ? timeResult[3] * 10 : timeResult[3] * 1; // 毫秒（长度可能为 2，也可能为 3，需要进行转换下）
    const time = minute + second + millsecond; // 获取当前歌词的时间点（全部加起来）

    // 2、获取匹配到的歌词文本内容
    const lyricText = lineString.replace(timeRegExp, "");
    lyricInfos.push({ time, lyricText });
  }

  return lyricInfos;
}
